Update so that toplevel windows accomodate for the titlebar when sizing.
authorJonathan Blandford <jrb@redhat.com>
Tue, 16 Nov 2004 05:10:18 +0000 (05:10 +0000)
committerJonathan Blandford <jrb@src.gnome.org>
Tue, 16 Nov 2004 05:10:18 +0000 (05:10 +0000)
Tue Nov 16 00:08:07 2004  Jonathan Blandford  <jrb@redhat.com>

        * docs/tools/widgets.c: Update so that toplevel windows accomodate
        for the titlebar when sizing.  Also clean up statusbar

        * docs/reference/gtk/images/*png: update

31 files changed:
docs/reference/gtk/images/accel-label.png
docs/reference/gtk/images/button.png
docs/reference/gtk/images/check-button.png
docs/reference/gtk/images/color-button.png
docs/reference/gtk/images/combo-box-entry.png
docs/reference/gtk/images/entry.png
docs/reference/gtk/images/file-button.png
docs/reference/gtk/images/font-button.png
docs/reference/gtk/images/frame.png
docs/reference/gtk/images/icon-view.png
docs/reference/gtk/images/image.png
docs/reference/gtk/images/label.png
docs/reference/gtk/images/list-and-tree.png
docs/reference/gtk/images/menubar.png
docs/reference/gtk/images/messagedialog.png
docs/reference/gtk/images/multiline-text.png
docs/reference/gtk/images/notebook.png
docs/reference/gtk/images/panes.png
docs/reference/gtk/images/progressbar.png
docs/reference/gtk/images/radio-group.png
docs/reference/gtk/images/scales.png
docs/reference/gtk/images/scrolledwindow.png
docs/reference/gtk/images/separator.png
docs/reference/gtk/images/spinbutton.png
docs/reference/gtk/images/statusbar.png
docs/reference/gtk/images/toggle-button.png
docs/reference/gtk/images/toolbar.png
docs/reference/gtk/images/window.png
docs/tools/shooter.c
docs/tools/widgets.c
docs/tools/widgets.h

index aa928778197417786578914b0e2c87d31313f8f6..2b867ca6cc547fb556d6bb8c2b0509fc820e5b2c 100644 (file)
Binary files a/docs/reference/gtk/images/accel-label.png and b/docs/reference/gtk/images/accel-label.png differ
index b33190f6f6478ec2c98352f6a6f99f1cf01c7674..c59361aa1b7b80048a82693c24855e5e77ca746c 100644 (file)
Binary files a/docs/reference/gtk/images/button.png and b/docs/reference/gtk/images/button.png differ
index 5c38179d37cdfc16ab90462ed5b29d408f99ad57..a309cfade746feaae9d4abe09d53a321e9a0dff1 100644 (file)
Binary files a/docs/reference/gtk/images/check-button.png and b/docs/reference/gtk/images/check-button.png differ
index 256c8d9a243bfa192d4f1c13728b5717b99f5008..5441361f70b950b2d16a935dcac7216f561ee4fc 100644 (file)
Binary files a/docs/reference/gtk/images/color-button.png and b/docs/reference/gtk/images/color-button.png differ
index d5f216fd3524b7dc282531efb8cc08e8be867398..a32144159bc989e735bbcb3a3e03927440b2682a 100644 (file)
Binary files a/docs/reference/gtk/images/combo-box-entry.png and b/docs/reference/gtk/images/combo-box-entry.png differ
index eebca164e4dffd30d4960dd2a585c4c7fc99f530..3322b4ad02eca90eeb7159e71d57d1c67b68053f 100644 (file)
Binary files a/docs/reference/gtk/images/entry.png and b/docs/reference/gtk/images/entry.png differ
index 4f40e8732b3ffd9650f86fd2c31b47fe48f2968e..5c79ab19394f32f86580359e8c12f064077c51cc 100644 (file)
Binary files a/docs/reference/gtk/images/file-button.png and b/docs/reference/gtk/images/file-button.png differ
index 43e6aa5773827864f42bb9354221d5a8c75a470f..669320152bf2c2c326303d080c11c871292ccff3 100644 (file)
Binary files a/docs/reference/gtk/images/font-button.png and b/docs/reference/gtk/images/font-button.png differ
index 5a91f7e6dd2ae8a6bd527496d3a86ebe8683e840..d76a2eaf75b5e8da3607969b71d5737d401364ff 100644 (file)
Binary files a/docs/reference/gtk/images/frame.png and b/docs/reference/gtk/images/frame.png differ
index 49038c5df2d932de23d291ecc00837e4746ba79f..4617ec63aa5e7f75add87f8c40f3209d8820445e 100644 (file)
Binary files a/docs/reference/gtk/images/icon-view.png and b/docs/reference/gtk/images/icon-view.png differ
index f611aba507635d9ea1249bf82645081669110565..7de7237dbd777bdb2e872296469730364f768dac 100644 (file)
Binary files a/docs/reference/gtk/images/image.png and b/docs/reference/gtk/images/image.png differ
index c57ee62f6fcb5b895510aec27e57715c879a866e..3c94371321b150a87123894ddf682b3523e8c24f 100644 (file)
Binary files a/docs/reference/gtk/images/label.png and b/docs/reference/gtk/images/label.png differ
index fa720d8144bf37a2adc958ea049ad45ef62d0102..f42e67f15400f248cc6cd450bd1b74949feeed12 100644 (file)
Binary files a/docs/reference/gtk/images/list-and-tree.png and b/docs/reference/gtk/images/list-and-tree.png differ
index 3e2fcd5a57666b056a69e20790efeff4295adb41..96c5b7cf25b7b944bc1858f0afd24d7e2aa2fb36 100644 (file)
Binary files a/docs/reference/gtk/images/menubar.png and b/docs/reference/gtk/images/menubar.png differ
index 61197ba4d09e509a00b900a683bd2f2027b93ac7..f20eac3edb35376baa9239cdf31e02e5faff7e4e 100644 (file)
Binary files a/docs/reference/gtk/images/messagedialog.png and b/docs/reference/gtk/images/messagedialog.png differ
index d2f3d592f1695c59bee5bf4d6231527847bc3490..4a8dba3f079a940e76aaf415948b64616a9cdfe3 100644 (file)
Binary files a/docs/reference/gtk/images/multiline-text.png and b/docs/reference/gtk/images/multiline-text.png differ
index 21bdb42f840405494a37fe41916c5b00a7407bb0..4b344e160d1ac69c88f4e32aea6be6b1d25ea02d 100644 (file)
Binary files a/docs/reference/gtk/images/notebook.png and b/docs/reference/gtk/images/notebook.png differ
index 5132d4790b1ee7f11a0b7b5e5d52fcb1625249a9..93c455fb28c4e0974fd5a26516517c92a485affb 100644 (file)
Binary files a/docs/reference/gtk/images/panes.png and b/docs/reference/gtk/images/panes.png differ
index 21e4ed58e3b961c8ddc7cddcf9a5aef214b53cce..542486f74c5133bb329bfa2714b33e96867d98d7 100644 (file)
Binary files a/docs/reference/gtk/images/progressbar.png and b/docs/reference/gtk/images/progressbar.png differ
index 94552e0c046bff48f9d383e5155b52c270a78cd9..70701d24334e3a04b3354be1761b9ee29db278e0 100644 (file)
Binary files a/docs/reference/gtk/images/radio-group.png and b/docs/reference/gtk/images/radio-group.png differ
index 342061863e2c5a48eb8dc9d3c34d71d845634181..c24fef24735bb33c55f11e2eed6199b4f9677fba 100644 (file)
Binary files a/docs/reference/gtk/images/scales.png and b/docs/reference/gtk/images/scales.png differ
index fa95d826ec81e95df9281e07e8ff386559f2ad9b..341a2a4f5ae6fcf4a8ea89b219b77eaff2845011 100644 (file)
Binary files a/docs/reference/gtk/images/scrolledwindow.png and b/docs/reference/gtk/images/scrolledwindow.png differ
index 4e7f74ec6a8973d45365f3e4eb0f7b389798ff13..f3435b2ed4901a4fa6c12987502f9693cb6a2a96 100644 (file)
Binary files a/docs/reference/gtk/images/separator.png and b/docs/reference/gtk/images/separator.png differ
index fb0bd45baf889946c9273d8eb1928880b8f193c2..6fe099f9eefc6a9d881880699288d9286f71a378 100644 (file)
Binary files a/docs/reference/gtk/images/spinbutton.png and b/docs/reference/gtk/images/spinbutton.png differ
index e257828d88ebe2128a0b689bb9518d2909d785b4..59f1247981ac7a90eba3a88535f3e4e8a267ed35 100644 (file)
Binary files a/docs/reference/gtk/images/statusbar.png and b/docs/reference/gtk/images/statusbar.png differ
index 8ed666b7002c97038a009039c3b94d07a69b73a8..5593de19dd9ef4993c63cade6d2bd5a559a5b7b6 100644 (file)
Binary files a/docs/reference/gtk/images/toggle-button.png and b/docs/reference/gtk/images/toggle-button.png differ
index d5ae5806f264dc72b1eef5c1ff86f26604d88ae6..068c6b749a8266841057f9eaafe2dcbcb133c766 100644 (file)
Binary files a/docs/reference/gtk/images/toolbar.png and b/docs/reference/gtk/images/toolbar.png differ
index fee6dccfef5747d01a4298c77d1f2cdf08ddd97a..b234f6d4b871ccf27acec12e7b94aaab86ca9660 100644 (file)
Binary files a/docs/reference/gtk/images/window.png and b/docs/reference/gtk/images/window.png differ
index 3c96c7565034e8bd83faf6491da6b6a503de46dc..75b892bcd3be3659d64a62f017582e00f802ae63 100644 (file)
@@ -212,6 +212,7 @@ int main (int argc, char **argv)
          gtk_main_iteration ();
        }
       sleep (1);
+
       while (gtk_events_pending ())
        {
          gtk_main_iteration ();
index 12d7d188fe9f29378e3b18506051af8fdc561a46..58c68896332bd781842f5d28d68582a4b53bde16 100644 (file)
@@ -1,12 +1,91 @@
 #include <gdk/gdkkeysyms.h>
+#include <X11/Xatom.h>
+#include <gdkx.h>
 #include "widgets.h"
 
-typedef enum
+
+#define SMALL_WIDTH  240
+#define SMALL_HEIGHT 75
+#define MEDIUM_WIDTH 240
+#define MEDIUM_HEIGHT 165
+#define LARGE_WIDTH 240
+#define LARGE_HEIGHT 240
+
+static Window
+find_toplevel_window (Window xid)
 {
-  SMALL,
-  MEDIUM,
-  LARGE
-} WidgetSize;
+  Window root, parent, *children;
+  int nchildren;
+
+  do
+    {
+      if (XQueryTree (GDK_DISPLAY (), xid, &root,
+                     &parent, &children, &nchildren) == 0)
+       {
+         g_warning ("Couldn't find window manager window");
+         return None;
+       }
+
+      if (root == parent)
+       return xid;
+
+      xid = parent;
+    }
+  while (TRUE);
+}
+
+
+static gboolean
+adjust_size_callback (WidgetInfo *info)
+{
+  Window toplevel;
+  Window root;
+  gint tx;
+  gint ty;
+  guint twidth;
+  guint theight;
+  guint tborder_width;
+  guint tdepth;
+  gint target_width = 0;
+  gint target_height = 0;
+
+  toplevel = find_toplevel_window (GDK_WINDOW_XID (info->window->window));
+  XGetGeometry (GDK_WINDOW_XDISPLAY (info->window->window),
+               toplevel,
+               &root, &tx, &ty, &twidth, &theight, &tborder_width, &tdepth);
+
+  switch (info->size)
+    {
+    case SMALL:
+      target_width = SMALL_WIDTH;
+      target_height = SMALL_HEIGHT;
+      break;
+    case MEDIUM:
+      target_width = MEDIUM_WIDTH;
+      target_height = MEDIUM_HEIGHT;
+      break;
+    case LARGE:
+      target_width = LARGE_WIDTH;
+      target_height = LARGE_HEIGHT;
+      break;
+    }
+
+  if (twidth > target_width ||
+      theight > target_height)
+    {
+      gtk_widget_set_size_request (info->window,
+                                  2 + target_width - (twidth - target_width), /* Dunno why I need the +2 fudge factor; */
+                                  2 + target_height - (theight - target_height));
+    }
+  return FALSE;
+}
+
+static void
+realize_callback (GtkWidget  *widget,
+                 WidgetInfo *info)
+{
+  g_timeout_add (500, (GSourceFunc)adjust_size_callback, info);
+}
 
 static WidgetInfo *
 new_widget_info (const char *name,
@@ -17,10 +96,13 @@ new_widget_info (const char *name,
 
   info = g_new0 (WidgetInfo, 1);
   info->name = g_strdup (name);
+  info->size = size;
   if (GTK_IS_WINDOW (widget))
     {
       info->window = widget;
+      gtk_window_set_resizable (GTK_WINDOW (info->window), FALSE);
       info->include_decorations = TRUE;
+      g_signal_connect (info->window, "realize", G_CALLBACK (realize_callback), info);
     }
   else
     {
@@ -454,8 +536,7 @@ create_window (void)
   WidgetInfo *info;
   GtkWidget *widget;
 
-  widget = gtk_frame_new (NULL);
-  gtk_frame_set_shadow_type (GTK_FRAME (widget), GTK_SHADOW_NONE);
+  widget = gtk_window_new (GTK_WINDOW_TOPLEVEL);
   info = new_widget_info ("window", widget, MEDIUM);
   info->include_decorations = TRUE;
   gtk_window_set_title (GTK_WINDOW (info->window), "Window");
@@ -525,7 +606,7 @@ create_message_dialog (void)
                                   GTK_BUTTONS_OK,
                                   NULL);
   gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (widget),
-                                "<b>Message Dialog</b>");
+                                "<b>Message Dialog</b>\n\nWith secondary text");
   return new_widget_info ("messagedialog", widget, MEDIUM);
 }
 
@@ -602,23 +683,28 @@ create_spinbutton (void)
 static WidgetInfo *
 create_statusbar (void)
 {
+  WidgetInfo *info;
   GtkWidget *widget;
   GtkWidget *vbox, *align;
 
+  vbox = gtk_vbox_new (FALSE, 0);
+  align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
+  gtk_container_add (GTK_CONTAINER (align), gtk_label_new ("Status Bar"));
+  gtk_box_pack_start (GTK_BOX (vbox),
+                     align,
+                     TRUE, TRUE, 0);
   widget = gtk_statusbar_new ();
+  align = gtk_alignment_new (0.5, 1.0, 1.0, 0.0);
+  gtk_container_add (GTK_CONTAINER (align), widget);
   gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (widget), TRUE);
   gtk_statusbar_push (GTK_STATUSBAR (widget), 0, "Hold on...");
-  gtk_widget_set_size_request (widget, 220, -1);
 
-  vbox = gtk_vbox_new (FALSE, 3);
-  align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
-  gtk_container_add (GTK_CONTAINER (align), widget);
-  gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
-  gtk_box_pack_start (GTK_BOX (vbox),
-                     gtk_label_new ("Status Bar"),
-                     FALSE, FALSE, 0);
+  gtk_box_pack_end (GTK_BOX (vbox), align, FALSE, FALSE, 0);
+
+  info = new_widget_info ("statusbar", vbox, SMALL);
+  gtk_container_set_border_width (GTK_CONTAINER (info->window), 0);
 
-  return new_widget_info ("statusbar", vbox, SMALL);
+  return info;
 }
 
 static WidgetInfo *
@@ -669,34 +755,34 @@ get_all_widgets (void)
 {
   GList *retval = NULL;
 
+  retval = g_list_prepend (retval, create_accel_label ());
   retval = g_list_prepend (retval, create_button ());
-  retval = g_list_prepend (retval, create_toggle_button ());
   retval = g_list_prepend (retval, create_check_button ());
-  retval = g_list_prepend (retval, create_entry ());
-  retval = g_list_prepend (retval, create_radio ());
-  retval = g_list_prepend (retval, create_label ());
-  retval = g_list_prepend (retval, create_combo_box_entry ());
-  retval = g_list_prepend (retval, create_text_view ());
-  retval = g_list_prepend (retval, create_tree_view ());
   retval = g_list_prepend (retval, create_color_button ());
+  retval = g_list_prepend (retval, create_combo_box_entry ());
+  retval = g_list_prepend (retval, create_entry ());
+  retval = g_list_prepend (retval, create_file_button ());
   retval = g_list_prepend (retval, create_font_button ());
-  retval = g_list_prepend (retval, create_separator ());
-  retval = g_list_prepend (retval, create_panes ());
   retval = g_list_prepend (retval, create_frame ());
-  retval = g_list_prepend (retval, create_window ());
-  retval = g_list_prepend (retval, create_accel_label ());
-  retval = g_list_prepend (retval, create_file_button ());
   retval = g_list_prepend (retval, create_icon_view ());
-  retval = g_list_prepend (retval, create_toolbar ());
+  retval = g_list_prepend (retval, create_image ());
+  retval = g_list_prepend (retval, create_label ());
   retval = g_list_prepend (retval, create_menubar ());
-  retval = g_list_prepend (retval, create_notebook ());
   retval = g_list_prepend (retval, create_message_dialog ());
+  retval = g_list_prepend (retval, create_notebook ());
+  retval = g_list_prepend (retval, create_panes ());
   retval = g_list_prepend (retval, create_progressbar ());
+  retval = g_list_prepend (retval, create_radio ());
+  retval = g_list_prepend (retval, create_scales ());
   retval = g_list_prepend (retval, create_scrolledwindow ());
+  retval = g_list_prepend (retval, create_separator ());
   retval = g_list_prepend (retval, create_spinbutton ());
   retval = g_list_prepend (retval, create_statusbar ());
-  retval = g_list_prepend (retval, create_scales ());
-  retval = g_list_prepend (retval, create_image ());
+  retval = g_list_prepend (retval, create_text_view ());
+  retval = g_list_prepend (retval, create_toggle_button ());
+  retval = g_list_prepend (retval, create_toolbar ());
+  retval = g_list_prepend (retval, create_tree_view ());
+  retval = g_list_prepend (retval, create_window ());
 
   return retval;
 }
index 4540f313efd1b29fc19c63060e2907aee9aaca58..f4541b46251717c7aab03ee811d7bf8eb2c9badb 100644 (file)
@@ -3,12 +3,21 @@
 
 #include <gtk/gtk.h>
 
+
+typedef enum
+{
+  SMALL,
+  MEDIUM,
+  LARGE
+} WidgetSize;
+
 typedef struct WidgetInfo
 {
   GtkWidget *window;
   gchar *name;
   gboolean no_focus;
   gboolean include_decorations;
+  WidgetSize size;
 } WidgetInfo;
 
 GList *get_all_widgets (void);